/*
 * Annuaire.cpp
 *
 *  Created on: 2013-11-29
 *      Author: Jean-Simon,Simon
 */
#include <fstream>
#include <iostream>
#include <stdexcept>
#include "Annuaire.h"
#include "ArbreAVL.h"
#include "ArbreGenealogique.h"

namespace tp3
{
/**
 * \fn	Annuaire::Annuaire()
 * \brief	Constructeur par défaut
 */
Annuaire::Annuaire()
{
	//m_bottin = new ArbreAVL<Personne>();
}

Annuaire::Annuaire(std::ifstream& p_fichierEntree)
{
	if (p_fichierEntree == NULL)
			throw std::logic_error("Couverture: fichier non ouvert\n");

		std::string nom;
		std::string prenom;
		std::string dateNaissance;
		int date;

		bool sentinelle = false;

		while (!p_fichierEntree.eof() && sentinelle == false)
		{
			getline(p_fichierEntree, nom);

			if (nom == "$")
			{
				sentinelle = true;
			}
			else
			{
				getline(p_fichierEntree, prenom);
				getline(p_fichierEntree, dateNaissance);
				date = std::atoi(dateNaissance.c_str());

				//inscrire(new Personne(nom, prenom, date));
			}
		}

		while (!p_fichierEntree.eof())
		{
			getline(p_fichierEntree, prenom);
			getline(p_fichierEntree, dateNaissance);
			date = std::atoi(dateNaissance.c_str());
		}
		//	cout << m_graphe;
}

Annuaire::~Annuaire()
{

}

void Annuaire::inscrire(const Personne& p_personne,const Adresse &p_adresse)
{
	m_bottin.inserer(p_personne,p_adresse);
}

void Annuaire::ajouterEnfant(Personne& p_parent, Personne& p_enfant)
{
	    if (!m_bottin.appartient(p_parent))
	    {
	        throw std::logic_error("Le parent n'existe pas");
	    }
	    if (!m_bottin.appartient(p_enfant))
	    {
	        throw std::logic_error("L'enfant n'existe pas");
	    }
	    std::vector< std::pair< Personne, Adresse > > vec = m_bottin.lister();
	    Personne parent("","","");

	    for(unsigned int i = 0; i < vec.size(); i++)
	    {
	    	if(vec[i].first == p_parent )
	    	{
	    		parent = vec[i].first;
	    	}
	    }

	    if (p_parent == p_enfant)
	    {
	    	m_listeArbregene.ajouter(ArbreGenealogique(parent),m_listeArbregene.taille() + 1);
	    }
	    else
	    {
	        for (int i = 1; i < m_listeArbregene.taille() + 1; ++i)
	        {
	            if (m_listeArbregene.element(i).appartient(p_parent))
	            {
	                Personne enfant("","","");// = m_bottin.cle(m_bottin.valeur(p_enfant));
	                for(unsigned int j = 0; j < vec.size(); j++)
	               	    {
	               	    	if(vec[j].first == p_enfant )
	               	    	{
	               	    		enfant = vec[j].first;
	               	    	}
	               	    }
	                // PAS TROP CERTAIN.

	                ArbreGenealogique  arbre = m_listeArbregene.element(i);//.ajouterEnfant(parent, enfant);
	                arbre.ajouterEnfant(parent,enfant);
	                return;
	            }
	        }
	    }
}
}

